package com.fast.develop.dm.meta;

import com.fast.develop.dm.meta.builder.MetaModelBuilder;
import com.fast.develop.dm.meta.extend.ExtendStrategy;
import com.fast.develop.dm.meta.field.FieldCatelog;

import java.util.List;
import java.util.Map;

/**
 * @author 莫寅
 * @createTime 2022-06-01 15:17
 * @desc：
 * 继承可继承：（生成抽象模型继承），两实体模型继承（共享同一实体模型，连接两个实体模型，复制一个实体模型）
 *      字段：--> 基础类型（字符、数字、日期、时间、金额、文件、图片、文件）
 *           --> 字典类型
 *           --> 基础数据（用户ID、订单Code）
 *           --> 值对象
 *           --> 关联对象（一对一、一对多、多对一、多对多）
 *
 */
public class MetaDomainModel {

    /**
     * 身份
     */
    private final MetaField identifierProperty;
    /**
     * 模型名
     */
    private final String name;
    /**
     * 表名
     */
    private final String tableName;
    /**
     * 描述
     */
    private final String comment;
    /**
     * 父模型
     */
    private final String superModel;
    /**
     * 继承策略
     */
    private final ExtendStrategy extendStrategy;
    /**
     * 模型字段
     */
    private final List<MetaField> fields;
    /**
     * 目录字段集
     */
    private final Map<FieldCatelog, MetaField> catelogMetaFields;


    public MetaDomainModel(MetaModelBuilder metaModelBuilder) {
        this.identifierProperty = metaModelBuilder.getIdentifierProperty();
        this.name = metaModelBuilder.getName();
        this.tableName = metaModelBuilder.getTableName();
        this.comment = metaModelBuilder.getComment();
        this.superModel = metaModelBuilder.getSuperModel();
        this.extendStrategy = metaModelBuilder.getExtendStrategy();
        this.fields = metaModelBuilder.getFields();
        this.catelogMetaFields = metaModelBuilder.getCatelogMetaFields();
    }

    public MetaField getIdentifierProperty() {
        return identifierProperty;
    }

    public String getName() {
        return name;
    }

    public String getTableName() {
        return tableName;
    }

    public String getComment() {
        return comment;
    }

    public String getSuperModel() {
        return superModel;
    }

    public ExtendStrategy getExtendStrategy() {
        return extendStrategy;
    }

    public List<MetaField> getFields() {
        return fields;
    }

    public Map<FieldCatelog, MetaField> getCatelogMetaFields() {
        return catelogMetaFields;
    }
}
